package com.ruoyi.merchant.mapper;

import java.util.List;
import com.ruoyi.merchant.domain.MerchantRegionBinding;
import org.apache.ibatis.annotations.Param;

/**
 * 商家区域绑定Mapper接口
 * 
 * @author xperia
 */
public interface MerchantRegionBindingMapper {

    /**
     * 查询已删除的绑定记录
     */
    MerchantRegionBinding selectDeletedBinding(
            @Param("merchantId") Long merchantId,
            @Param("regionId") Long regionId
    );

    /**
     * 恢复已删除的绑定记录
     */
    int restoreBinding(MerchantRegionBinding binding);


    /**
     * 查询商家的区域绑定列表
     * 
     * @param merchantId 商家ID
     * @return 区域绑定列表
     */
    List<MerchantRegionBinding> selectBindingsByMerchantId(@Param("merchantId") Long merchantId);

    /**
     * 查询商家的第一个有效区域绑定
     * 
     * @param merchantId 商家ID
     * @return 区域绑定
     */
    MerchantRegionBinding selectFirstBindingByMerchantId(@Param("merchantId") Long merchantId);

    /**
     * 根据绑定ID查询
     * 
     * @param bindingId 绑定ID
     * @param merchantId 商家ID
     * @return 区域绑定
     */
    MerchantRegionBinding selectBindingById(@Param("bindingId") Long bindingId, @Param("merchantId") Long merchantId);

    /**
     * 新增区域绑定
     * 
     * @param binding 区域绑定
     * @return 结果
     */
    int insertBinding(MerchantRegionBinding binding);

    /**
     * 更新区域绑定
     * 
     * @param binding 区域绑定
     * @return 结果
     */
    int updateBinding(MerchantRegionBinding binding);

    /**
     * 更新绑定状态
     * 
     * @param bindingId 绑定ID
     * @param merchantId 商家ID
     * @param status 状态
     * @return 结果
     */
    int updateBindingStatus(@Param("bindingId") Long bindingId, @Param("merchantId") Long merchantId, @Param("status") Integer status);

    /**
     * 删除区域绑定
     * 
     * @param bindingId 绑定ID
     * @param merchantId 商家ID
     * @return 结果
     */
    int deleteBinding(@Param("bindingId") Long bindingId, @Param("merchantId") Long merchantId);

    /**
     * 检查商家和区域是否已绑定
     * 
     * @param merchantId 商家ID
     * @param regionId 区域ID
     * @param excludeBindingId 排除的绑定ID（编辑时使用）
     * @return 数量
     */
    int checkBindingExists(@Param("merchantId") Long merchantId, @Param("regionId") Long regionId, @Param("excludeBindingId") Long excludeBindingId);
}

